As computer generated graphics have evolved, the demand for processing capabilities has increased. While a single central processing unit (CPU) has historically been utilized to process instructions for rendering graphics, many graphics applications can be better realized with additional hardware. More specifically, as graphics demands have increased, the use of multiple CPUs, and/or a graphics processing unit (GPU) has also been utilized. The introduction of a GPU into a computer has helped streamline the processing of graphics instructions. While the introduction of a GPU has increased graphics capabilities, many dynamic graphics scenes are more suitably rendered with the utilization of a plurality of GPUs. In introducing more than one GPU into a computing environment, synchronization of the GPUs may be desirable.
Software-based multiple CPU synchronization mechanisms have been utilized. However, because of the nature of recently developed GPUs, which may utilize stream type architecture and may run a plurality of contexts, the existing multiple CPU synchronization support may not adequately fulfill the desired software and/or hardware functionality. Introduction of a PCI-Express system interface may provide a generic message transport level for communication between a plurality of CPUs and GPUs in the computer system as well as coherency support between data blocks in main and local memories.
PCI-Express locked transaction can be configured to support messages and vendor defined messages that can be used as low level primitives for implementation of different synchronization types. However, this mechanism may not contain desired GPU synchronization support and vendors must define their messages to support multi-CPU and multi-GPU configurations of the system, as well as special hardware blocks in GPU architecture. These messages may be defined as GPU metacommands which control the activity of GPU on input command stream manipulating.